代理服务器(proxy)原理

17.1 什么是代理服务器(Proxy)

以类似代理人的身份去取得用户所需要的数据就是了! 但是由于它的『代理』能力,使得我们可以透过代理服务器来达成防火墙功能与用户浏览数据的分析!

此外,也可以藉由代理服务器来达成节省带宽的目的,以及加快内部网络对因特网的 WWW 访问速度

17.1.1 什么是代理服务器

我们或许会帮忙家人去办理一些杂务吧!举个例子来说,例如缴费或者是申办提款卡等等的, 由于你并不是『申请者本人』而是『代理人』的角色,

因此有时候会需要拿出一些证件

代理服务器(Proxy Server)与上面真实世界一样,当客户端有因特网的数据要求时, Proxy 会帮用户去向目的地取得用户所需要的数据。

所以,当客户端指定 WWW 的代理服务器之后,用户的所有 WWW 相关要求就会通过代理服务器去捉取。

 

 

代理服务器会架设在整个区网的单点对外防火墙上头,而在区网内部的计算机就都是透过 Proxy 来向因特网要求数据的,这就是所谓的『代理服务器』!

当然,上面的架构仅只是一个案例,但是这个架构比较多人用的原因, 是因为这样的Proxy server 还可以兼做高阶防火墙之用。

客户端向外部要求的数据事实上都是 Proxy 帮用户取得的,因此因特网上面看到要求数据者,将会是 Proxy

  • 8
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中实现代理服务器的方法主要有两种,一种是使用Java原生的Socket类实现代理服务器,另一种是使用第三方库实现代理服务器。 使用Java原生的Socket类实现代理服务器的步骤如下: 1. 创建一个ServerSocket对象,并指定代理服务器的监听端口号。 2. 使用while循环等待客户端连接,并使用accept()方法接受客户端的连接请求。 3. 在连接建立之后,读取客户端发送的请求,解析请求,获取要访问的目标服务器的地址和端口号。 4. 创建一个Socket对象,连接到目标服务器,并将客户端发送的请求转发给目标服务器。 5. 接收目标服务器的响应,将响应转发给客户端。 6. 关闭Socket和ServerSocket对象,结束连接。 以下是一个使用Java原生的Socket类实现代理服务器的示例代码: ``` import java.net.*; import java.io.*; public class ProxyServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(8080); while (true) { Socket clientSocket = serverSocket.accept(); new Thread(() -> { try { BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String requestLine = in.readLine(); String[] requestLineParts = requestLine.split("\\s+"); String method = requestLineParts[0]; String url = requestLineParts[1]; String version = requestLineParts[2]; URL targetUrl = new URL(url); Socket serverSocket = new Socket(targetUrl.getHost(), targetUrl.getPort()); OutputStream serverOut = serverSocket.getOutputStream(); serverOut.write(requestLine.getBytes()); serverOut.flush(); InputStream serverIn = serverSocket.getInputStream(); byte[] buffer = new byte[1024]; int length; while ((length = serverIn.read(buffer)) != -1) { clientSocket.getOutputStream().write(buffer, 0, length); clientSocket.getOutputStream().flush(); } in.close(); serverOut.close(); serverIn.close(); clientSocket.close(); } catch (IOException e) { e.printStackTrace(); } }).start(); } } } ``` 以上代码中,代理服务器监听8080端口,当有客户端连接时,会在一个新的线程中处理客户端的请求,读取请求行并解析出要访问的目标服务器地址和端口号,然后连接到目标服务器并将请求转发给目标服务器。接收到目标服务器的响应后,将响应转发给客户端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值